/**
 * 项目反馈服务模块
 */

// 使用统一配置辅助模块导入依赖
const serviceHelper = require('../../config/service_helper_config.js');
const { projectSetting, cloudHelper, timeHelper, dataHelper } = serviceHelper;

// 导入项目业务逻辑，添加容错处理
let ProjectBiz;
try {
  ProjectBiz = require('../../comm/biz/project_biz.js');
} catch (e) {
  console.error('无法导入project_biz.js，使用默认实现');
  ProjectBiz = {
    isValid: () => true,
    initPage: () => {}
  };
}

/**
 * 反馈服务类
 */
class FeedbackService {

  /**
   * 获取反馈列表
   * @param {*} param0 查询参数 
   * @returns 反馈列表
   */
  static async getList({ projectId, search, sortType, sortVal, orderBy, whereEx, page, size, isTotal = true, oldTotal }) {
    // 添加默认校验逻辑
    if (!ProjectBiz.isValid || (typeof ProjectBiz.isValid === 'function' && !ProjectBiz.isValid(projectId))) {
      console.warn('项目ID无效或ProjectBiz.isValid未定义');
      return { total: 0, list: [] };
    }

    // 构建排序字段
    let orderByStr = '';
    if (orderBy) {
      orderByStr = orderBy;
    } else if (sortType && dataHelper && dataHelper.checkSort && dataHelper.checkSort(sortType)) {
      orderByStr = sortType;
      if (sortVal !== '' && sortVal !== undefined && sortVal != null) {
        orderByStr += ':' + sortVal;
      }
    } else {
      orderByStr = 'FEEDBACK_ADD_TIME|desc';
    }

    // 构建查询参数
    const query = {
      dbName: 'feedback',
      where: {
        PROJECT_ID: projectId,
        FEEDBACK_STATUS: ['in', [0, 1]]
      },
      orderBy: orderByStr,
      page,
      size,
      isTotal,
      oldTotal
    };

    // 附加查询条件
    if (whereEx) {
      query.where = Object.assign(query.where, whereEx);
    }

    // 关键字查询
    if (search) {
      query.where.FEEDBACK_TITLE = {
        $regex: '.*' + search,
        $options: 'i'
      };
    }

    // 容错处理，确保即使cloudHelper不可用也不会崩溃
    if (!cloudHelper || !cloudHelper.callCloudData) {
      console.error('cloudHelper.callCloudData未定义，返回空数据');
      return { total: 0, list: [] };
    }

    return await cloudHelper.callCloudData(query);
  }

  /**
   * 提交反馈
   * @param {*} params 反馈参数
   * @returns 反馈结果
   */
  static async submitFeedback(params) {
    const { projectId, title, content, images = [] } = params;

    if (!ProjectBiz.isValid(projectId)) {
      return { success: false, message: '项目ID无效' };
    }

    if (!title || title.length < 5 || title.length > 50) {
      return { success: false, message: '反馈标题必须在5-50字之间' };
    }

    if (!content || content.length < 10 || content.length > 500) {
      return { success: false, message: '反馈内容必须在10-500字之间' };
    }

    if (images.length > 6) {
      return { success: false, message: '最多上传6张图片' };
    }

    const data = {
      PROJECT_ID: projectId,
      FEEDBACK_TITLE: title,
      FEEDBACK_CONTENT: content,
      FEEDBACK_IMAGES: images,
      FEEDBACK_STATUS: 0, // 0表示待处理
      FEEDBACK_ADD_TIME: timeHelper.time()
    };

    const result = await cloudHelper.callCloudSumbit('feedback', 'insert', data);
    return { success: result.code === 0, message: result.code === 0 ? '反馈提交成功' : '反馈提交失败' };
  }

  /**
   * 获取反馈详情
   * @param {*} feedbackId 反馈ID
   * @returns 反馈详情
   */
  static async getDetail(feedbackId) {
    const query = {
      dbName: 'feedback',
      where: {
        _id: feedbackId
      }
    };

    const result = await cloudHelper.callCloudData(query);
    if (result && result.data && result.data.length > 0) {
      return result.data[0];
    }
    return null;
  }

  /**
   * 获取反馈类型图标
   * @param {number} type 反馈类型
   * @returns {string} 图标名称
   */
  static getTypeIcon(type) {
    switch (parseInt(type)) {
      case 1: return 'bug'; // 功能问题
      case 2: return 'loading'; // 性能问题
      case 3: return 'like-o'; // 质量问题
      case 4: return 'bulb-o'; // 建议
      case 5: return 'notes-o'; // 其他
      default: return 'comment-o';
    }
  }

  /**
   * 获取反馈类型颜色
   * @param {number} type 反馈类型
   * @returns {string} 颜色
   */
  static getTypeColor(type) {
    switch (parseInt(type)) {
      case 1: return '#e54d42'; // 功能问题
      case 2: return '#f37b1d'; // 性能问题
      case 3: return '#fbbd08'; // 质量问题
      case 4: return '#39b54a'; // 建议
      case 5: return '#8799a3'; // 其他
      default: return '#0081ff';
    }
  }

  /**
   * 获取状态名称
   * @param {number} status 状态
   * @returns {string} 状态名称
   */
  static getStatusName(status) {
    switch (parseInt(status)) {
      case 1: return '待处理';
      case 2: return '处理中';
      case 3: return '已解决';
      case 4: return '已拒绝';
      case 5: return '已关闭';
      default: return '未知状态';
    }
  }
  
  /**
   * 获取类型名称
   * @param {number} type 类型
   * @returns {string} 类型名称
   */
  static getTypeName(type) {
    switch (parseInt(type)) {
      case 1: return '功能问题';
      case 2: return '性能问题';
      case 3: return '质量问题';
      case 4: return '建议';
      case 5: return '其他';
      default: return '未知类型';
    }
  }
}

// 确保正确导出模块
if (typeof module !== 'undefined' && module.exports) {
  module.exports = FeedbackService;
} 